import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.ImageIcon;
import javax.swing.JLabel;


public class Uto extends JPanel implements MouseMotionListener {

	  private int mX, mY;
	  

	  private Image mImage;

	  public SmoothMove() {
		addMouseMotionListener(this);
	    setVisible(true);
	  }


	  public void mouseMoved(MouseEvent me) {
		  mX = (int) me.getPoint().getX();
		  repaint();
	  }
	  public void mouseDragged(MouseEvent me) {
		  mouseMoved(me);
	  }
	  public void update(Graphics g) {
		  paint(g);
	  }

	  public void paint(Graphics g) {
		  
		  Dimension d = getSize();
		  checkOffscreenImage();
		  Graphics offG = mImage.getGraphics();
		  offG.setColor(getBackground());
		  offG.fillRect(0, 0, d.width, d.height);
		    
		  paintOffscreen(mImage.getGraphics());
		    
		  g.drawImage(mImage, 0, 0, null);
	  }

	  private void checkOffscreenImage() {
	  		Dimension d = getSize();
	  		if (mImage == null || mImage.getWidth(null) != d.width
		        || mImage.getHeight(null) != d.height) {		      mImage = createImage(d.width, d.height);
	  		}
	  }

	  public void paintOffscreen(Graphics g) {
		  int s = 100;
		  g.setColor(Color.blue);
		  g.fillRect(mX - s / 2, 350, s, 20);
	  }
	  
	  public static void main(String[] args) {
	    JFrame f = new JFrame();
	    f.getContentPane().add(new SmoothMove());
	    f.setSize(500, 500);
	    //try {
	    //	f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("logo.png")))));
	   // }
	   // catch (IOException e) {
        //    e.printStackTrace();
	   // }
	    //   f.setBackground(Color.YELLOW);
	    f.show();
	  }

	}
